home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / avr32 / include / asm / asm.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  1.9 KB  |  103 lines

  1. /*
  2.  * Copyright (C) 2004-2006 Atmel Corporation
  3.  *
  4.  * This program is free software; you can redistribute it and/or modify
  5.  * it under the terms of the GNU General Public License version 2 as
  6.  * published by the Free Software Foundation.
  7.  */
  8. #ifndef __ASM_AVR32_ASM_H__
  9. #define __ASM_AVR32_ASM_H__
  10.  
  11. #include <asm/sysreg.h>
  12. #include <asm/asm-offsets.h>
  13. #include <asm/thread_info.h>
  14.  
  15. #define mask_interrupts        ssrf    SYSREG_GM_OFFSET
  16. #define mask_exceptions        ssrf    SYSREG_EM_OFFSET
  17. #define unmask_interrupts    csrf    SYSREG_GM_OFFSET
  18. #define unmask_exceptions    csrf    SYSREG_EM_OFFSET
  19.  
  20. #ifdef CONFIG_FRAME_POINTER
  21.     .macro    save_fp
  22.     st.w    --sp, r7
  23.     .endm
  24.     .macro    restore_fp
  25.     ld.w    r7, sp++
  26.     .endm
  27.     .macro    zero_fp
  28.     mov    r7, 0
  29.     .endm
  30. #else
  31.     .macro    save_fp
  32.     .endm
  33.     .macro    restore_fp
  34.     .endm
  35.     .macro    zero_fp
  36.     .endm
  37. #endif
  38.     .macro    get_thread_info reg
  39.     mov    \reg, sp
  40.     andl    \reg, ~(THREAD_SIZE - 1) & 0xffff
  41.     .endm
  42.  
  43.     /* Save and restore registers */
  44.     .macro    save_min sr, tmp=lr
  45.     pushm    lr
  46.     mfsr    \tmp, \sr
  47.     zero_fp
  48.     st.w    --sp, \tmp
  49.     .endm
  50.  
  51.     .macro    restore_min sr, tmp=lr
  52.     ld.w    \tmp, sp++
  53.     mtsr    \sr, \tmp
  54.     popm    lr
  55.     .endm
  56.  
  57.     .macro    save_half sr, tmp=lr
  58.     save_fp
  59.     pushm    r8-r9,r10,r11,r12,lr
  60.     zero_fp
  61.     mfsr    \tmp, \sr
  62.     st.w    --sp, \tmp
  63.     .endm
  64.  
  65.     .macro    restore_half sr, tmp=lr
  66.     ld.w    \tmp, sp++
  67.     mtsr    \sr, \tmp
  68.     popm    r8-r9,r10,r11,r12,lr
  69.     restore_fp
  70.     .endm
  71.  
  72.     .macro    save_full_user sr, tmp=lr
  73.     stmts    --sp, r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,sp,lr
  74.     st.w    --sp, lr
  75.     zero_fp
  76.     mfsr    \tmp, \sr
  77.     st.w    --sp, \tmp
  78.     .endm
  79.  
  80.     .macro    restore_full_user sr, tmp=lr
  81.     ld.w    \tmp, sp++
  82.     mtsr    \sr, \tmp
  83.     ld.w    lr, sp++
  84.     ldmts    sp++, r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,sp,lr
  85.     .endm
  86.  
  87.     /* uaccess macros */
  88.     .macro branch_if_kernel scratch, label
  89.     get_thread_info \scratch
  90.     ld.w    \scratch, \scratch[TI_flags]
  91.     bld    \scratch, TIF_USERSPACE
  92.     brcc    \label
  93.     .endm
  94.  
  95.     .macro ret_if_privileged scratch, addr, size, ret
  96.     sub    \scratch, \size, 1
  97.     add    \scratch, \addr
  98.     retcs    \ret
  99.     retmi    \ret
  100.     .endm
  101.  
  102. #endif /* __ASM_AVR32_ASM_H__ */
  103.